import java.util.Arrays;
import java.util.Scanner;

/**
 * 
 * 根据某条件聚类最少交换次数
 * 
 * 题目描述

给出数字 K，请输出所有结果小于 K 的整数组合到一起的最少交换次数。

组合一起是指满足条件的数字相邻，不要求相邻后在数组中的位置。
数据范围：

-100 ≤ K ≤ 100
-100 ≤ 数组中数值 ≤ 100
输入描述
第一行输入数组：1 3 1 4 0

第二行输入 K 数值：2

输出描述
第一行输出最少交换次数：1

用例
输入	
1 3 1 4 0
2
输出	1
说明	小于2的表达式是1 1 0, 共三种可能将所有符合要求数字组合一起，最少交换1次。

 */

 /*
  * 
  题目解析
本题可以使用滑动窗口解题。

本题需要我们将输入数组中所有小于 k 的元素聚集一起，即形成一个连续区间。

因此，我们可以首先统计出输入数组中小于 k 的元素的总数，将其作为滑窗的固定长度window_len，即我们可以认为滑窗内部元素都是小于 k 的元素。

之后，我们使用 window_len 长度滑动窗口在输入数组中滑动，然后统计每一个滑动窗口内部有多少大于等于 k 的元素，对于这样的元素，我们需要交换出去。

因此滑动窗口内部有多少大于等于 k 的元素，即代表对于状态的滑窗窗口需要交换多少次，才能保证滑窗内部都是小于 k 的元素。
这里需要说明下，我们不关心具体怎么交换的，因为输入数组中小于 k 的元素数量时固定的，假设滑窗内部有 x 个大于等于 k 的元素，那么滑窗外部肯定就有对应的 x 个小于 k 的元素。

由于滑动窗口的移动是连续的，因此对于相邻的两个滑窗，是具有公共部分的，比如下面绿色框：



对于绿色框区域的元素，我们完全没有统计两次的必要，我们只需要统计滑动窗口每次移动后，失去的元素和新增的元素即可。



假设，第一个滑窗需要交换 swap 次，才能保证内部元素都小于 k。
看图，第二个滑窗 相较于 第一个滑窗，失去了元素1，新增了元素4
元素1小于k，因此失去元素1，第二个滑窗不会减少交换次数
元素4大于k，因此新增元素4，第二个滑窗需要增加交换次数
因此第二个滑窗需要 swap + 1 次交换，才能保证内部元素都小于 k
基于这种仅计算相邻状态差异的策略，我们可以在O(n)时间复杂度下完成所有滑窗内部交换次数的统计，最终保留最小交换次数即可。

  */
public class 根据某条件聚类最少交换次数 {
    public static void main(String[] args) {
        
        try{


            Scanner sc = new Scanner(System.in);
 
                int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
                int k = sc.nextInt();
        
                // window_len：所有小于k的元素个数
                int window_len = 0;
                for (int num : nums) {
                    if (num < k) {
                        window_len++;
                    }
                }
        
                int minSwap = Integer.MAX_VALUE;
        
                // 保证滑窗内都是小于k的元素, 所需的交换次数
                int swap = 0;
        
                for (int r = 0; r < nums.length; r++) {
                    // r 是滑窗的右边界, nums[r] 是滑窗新加入的元素
                    if (nums[r] >= k) {
                        // 如果nums[r] >= k, 则需要被交换, 交换次数+1
                        swap++;
                    }
        
                    // 当滑窗长度为 window_len + 1 时, 则滑窗左边界为 l = r - window_len
                    // 为了保证滑窗左边界为 window_len, 则此时左边界应该被丢弃, 即 nums[r - window_len] 应该被丢弃
                    // 如果 nums[r - window_len] >= k, 则滑窗内交换次数-1
                    if (r >= window_len && nums[r - window_len] >= k) {
                        swap--;
                    }
        
                    // 若 r < window_len - 1, 即使 l == 0, 滑窗长度也达不到 window_len
                    // 因此只有 r >= window_len - 1 时, 滑窗长度才能到达 window_len
                    if (r >= window_len - 1) {
                        minSwap = Math.min(minSwap, swap);
                    }
                }
        
                System.out.println(minSwap);


        }catch(Exception e){

            e.printStackTrace();
        }

    }
}
